#ifndef NETLIB_COUNTDOWNLATCH_H
#define NETLIB_COUNTDOWNLATCH_H

// 倒计时同步执行类

#include "Condition.h"
#include "Mutex.h"

namespace netlib
{

class CountDownLatch : noncopyable // 不可拷贝
{
public:

    explicit CountDownLatch(int count);

    void wait(); // 等待计数器减到0

    void countDown(); // 计数器减1

    int getCount() const; // 获取当前计数

    // mutable声明的变量可以在const修饰的函数中被修改
private:
    mutable MutexLock mutex_;                     // 互斥锁
    Condition condition_ GUARDED_BY(mutex_);      // 条件变量，接受锁的引用，不管理生命周期
    int count_ GUARDED_BY(mutex_);                // 计数器
};

} // namespace netlib end
#endif